A database is often structured to satisfy application requirements of providing a desired level of concurrent access and controlling the amount of storage space used by the database. For concurrent access requirements, database designers and administrators may struggle to balance the needs of providing concurrent access to the database to as many users as possible while assuring that each user receives some equitable amount of access. In allocating storage space, a desire to minimize the amount of storage used by a database may oppose the desire to maximize concurrent access by spreading the database uniformly across physical file space.
Some approaches to managing storage space choose to either sequentially allocate physical storage space in order to reduce the amount of storage space used for data, or randomly allocate portions of physical storage space in order to increase concurrency. These approaches may be most suitable in applications where one objective may be readily sacrificed in order to achieve the other objective. For example, if concurrent access is not required, then an approach may be taken to allocate sequential physical storage space without regard concurrency considerations. There are, however, applications in which both concurrency and sequential storage are important objectives.
For example, during a data gathering phase a database application may need a very high level of concurrency to log transaction related data. Then, during an analysis phase the database may be used more for reading, and the need to conserve physical storage space may exceed the need for currency.
Current approaches may force the application designer to choose, at the time the database is created, either to maximize concurrency or to minimize use of storage space. Updates to the database are then made using an approach suitable for the designer-specified objective. Even though the needs for levels of concurrency versus amount storage space may change over time, updates to the database continue to be made using the approach specified by the user when the database was established.